package com.ibm.crl.sb.thread.others.comsumer;

/**
 * 老紫竹JAVA提高教程-信号量(Semaphore)的使用。<br>
 * 生产者和消费者的例子，库存的管理。
 * 
 * @author 老紫竹(java2000.net,laozizhu.com)
 */
public class TestSemaphore {
	public static void main(String[] args) {
		// 启动线程
		for (int i = 0; i <= 3; i++) {
			// 生产者
			new Thread(new Producer()).start();
			// 消费者
			new Thread(new Consumer()).start();
		}
	}

	// 仓库
	static Warehouse buffer = new Warehouse(10);

	// 生产者，负责增加
	static class Producer implements Runnable {
		static int num = 1;

		@Override
		public void run() {
			int n = num++;
			while (true) {
				try {
					buffer.put(n);
					System.out.println(Thread.currentThread() + ">" + n);
					// 速度较快。休息10毫秒
//					Thread.sleep(10);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}

	// 消费者，负责减少
	static class Consumer implements Runnable {
		@Override
		public void run() {
			while (true) {
				try {
					System.out.println(Thread.currentThread() + "<"
							+ buffer.take());
					// 速度较慢，休息1000毫秒
					Thread.sleep(10);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}

}